/*本文件定义命令行的公共头文件，用户各子模块交互，以及命令行模块各宏定义，公共数据结构定义
 * 包括：
 * 01. 命令行模块的配置参数，例如支持的历史记录最大条数，每个命令字，参数支持的最大字符数
 * 02. 错误码，公共宏等。*/
#include <string>
using namespace std;

/* 这里定义编译宏，需要时打开 */
//#define CML_DEBUG  //定义debug模式编译宏

//支持的命令列表,可以自定义追加修改
#define SUPPORT_CMD_LIST "help","show","remoteip","shutdown","restart","jsoncmd","mycmd..."
/* 定义基本数据规格宏 */
#define OM_CML_ORDER_NUM_MAX       200    /* ֧最大命令数 */
#define OM_CML_HISTORY_MAX         200    /* 最大历史命令数 */
#define OM_CML_CHAR_MAX            5000   /* 最大输入字符数 */
#define OM_CML_PARSE_NUM_MAX       50     /* 最大解析数 */
#define OM_CML_PARSE_CHAR_MAX      100    /* 最大解析字符数*/
#define OM_CML_ORDER_CHAR_MAX      50     /* 最大命令字符数 */

/* 这里是cli使用接口 */
int cli_init();      /* 组件初始化 */

/* 设置Ctrl+v处理的自定义实现，根据不同平台适配 */
typedef void (*PF_CtrlvProc)(char *clipboard, int len);  /* Ctrl+v处理的函数原型 */
int cli_setCtrlvProcFunc(PF_CtrlvProc pfCtrlvProc);

/* 根据用户输入获取命令字符串 */
int getcmd(char *cmd);

/* 判断命令是否在列表中 */
bool isInCmdListTable(char cmd[]);

/* 命令字符串解析，解析成参数的格式 */
int omCmdlineParse(char  cmd[],  int *argc,  char argv[OM_CML_PARSE_NUM_MAX][OM_CML_PARSE_CHAR_MAX]);
